<?php  if ( ! defined('__CORE_PATH__')) exit('No direct script access allowed');
/* SVN FILE: $Id: app_controller.php 25 2008-08-29 21:58:28Z namaless $ */
/**
 * App Class
 *
 * Gestisce l'applicazione.
 *
 * @author			Pereira Pulido Nuno Ricardo | Namaless | namaless@gmail.com
 * @copyright		Copyright 1981-2008, Namaless.
 * @link			http://www.namaless.com Namaless Blog
 * @version			1.0
 * @version			$Revision: 25 $
 * @modifiedby		$LastChangedBy: namaless $
 * @lastmodified	$Date: 2008-08-29 23:58:28 +0200 (ven, 29 ago 2008) $
 * @license			http://www.opensource.org/licenses/gpl-license.php GNU Public License
 */

/**
 * Classe Principale.
 */
class App
{
	/**
	 * Singleton Pattern.
	 *
	 * @var object
	 **/
	private static $instance = NULL;
	
	/**
	 * Contiene le configurazioni.
	 *
	 * @var array
	 **/
	private $_settings = array();
	
	/**
	 * Path delle impostazioni.
	 */
	protected static $_path = "settings/";

	// --------------------------------------------------------------------

	/**
	 * Implemento il Singleton.
	 *
	 * @return	object
	 */
	public static function get_instance()
	{
		if ( self::$instance == NULL )
		{   
			$c = __CLASS__;
		    self::$instance =& new $c;
		}
		
		return self::$instance;
	}

	// --------------------------------------------------------------------

	private function __construct(){}
	
	// --------------------------------------------------------------------

	private function __clone(){}
	
	// --------------------------------------------------------------------

	public function __destruct(){}
	
	// --------------------------------------------------------------------

	/**
	 * Implemento il Factory.
	 */
	public static function factory(){}

	// --------------------------------------------------------------------

	public static function setting($item)
	{
		$items = explode(".", $item);

		$xml_file = strtolower($items[0]);
		
		// Inserisco un marcatore.
		Benchmark::mark('app_setting_parsing_' . $xml_file . '_start');

		if ( count($items) > 1 )
		{
			$xml_key = $items[1];
		}

		// Definisco il file_path.
		$xml_file_path = base_path(self::$_path . "{$xml_file}.xml");
		
		// Controllo se esiste il file di configurazione da caricare.
		if ( file_exists($xml_file_path) )
		{
			// Carico il file XML.
			$xml = Cache::store('settings', "{$xml_file}_{$xml_key}", new SimpleXMLElement($xml_file_path, NULL, TRUE));

			foreach ( $xml->setting AS $setting )
			{
				if ( ! isset($xml_key) )
				{
					$id = (string)$setting->id;
					$settings->$id = (string)$setting->value;
					continue;
				}

				// Controllo se esiste l'impostazione richiesta.
				if ( $setting->id == $xml_key )
				{
					// Inserisco un marcatore.
					Benchmark::mark('app_setting_parsing_' . $xml_file . '_end');

					return (string)$setting->value;
				}
			}
			
			// Se voglio l'intero array lo ritrasformo
			if ( ! isset($xml_key) )
			{
				// Inserisco un marcatore.
				Benchmark::mark('app_setting_parsing_' . $xml_file . '_end');
		
				// Inserisco l'array della lingua nella cache.
				return Cache::store('settings', $xml_file, $settings);
			}

			// Nel caso il ciclo si concluda vuol dire che non ha trovato l'ID e quindi genera un'errore.
			show_error(__("The requested '{1}' setting var not exists.", $xml_key));
		}
		else
		{
			show_error_404(__("The file requested '{1}' not found.", $xml_file_path), $xml_file_path);
		}
	}
}
